package com.sisgesbyte.services.sistema;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;

import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.common.Validaciones;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.dao.beanDao.MenuEditRequest;
import com.sisgesbyte.dao.beanDao.MenuNuevoRequest;
import com.sisgesbyte.dao.tecnico.MantenimientoMenuDao;
import com.sisgesbyte.data.entity.comun.GenericEntity;
import com.sisgesbyte.data.entity.tecnico.ListaMenuEntity;
import com.sisgesbyte.services.commonBean.GenericResponse;
import com.sisgesbyte.services.sistema.bean.ListaMenuResponse;
import com.sisgesbyte.services.sistema.bean.MenuBean;

@Stateless
public class MantenimientoMenuImpl implements MantenimientoMenu{

	@EJB
	private MantenimientoMenuDao mantenimientoMenuDao;
	
	@Inject
	private Validaciones validaciones;
	
	@Override
	public ListaMenuResponse mostrarListaMenu(String idTransaccion,FiltrosSQLBean cadenaFiltros) {
		
		ListaMenuResponse response = new ListaMenuResponse();
		
		try{
			
			List<ListaMenuEntity> lista = mantenimientoMenuDao.listaMenu(cadenaFiltros);
			
			if(lista.size() > 0){
				
				List<MenuBean> listaMenu = new ArrayList<MenuBean>();
				
				for(ListaMenuEntity row : lista){
					MenuBean menu = new MenuBean();
					menu.setActive(row.getActive());
					menu.setCodMenuPadre(row.getCodpadre());
					menu.setNombreMenuPadre(validaciones.validarCamposString(row.getNombrepadre()));
					menu.setIcon(validaciones.validarCamposString(row.getIcon()));
					menu.setId(row.getId());
					menu.setNombreMenu(validaciones.validarCamposString(row.getMenu()));
					menu.setCodModulo(row.getCodmodulo());
					menu.setNombreModulo(validaciones.validarCamposString(row.getModulo()));
					menu.setOrden(row.getOrden());
					menu.setUrl(validaciones.validarCamposString(row.getUrl()));
					listaMenu.add(menu);
				}
				
				response.setListaMenu(listaMenu);
				response.setIdTransaccion(idTransaccion);
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
				
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_MENU_COD_IDF13);
				response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_MENU_MSJ_IDF13);
			}
		}catch(Exception e){
			System.out.println("Error: " + e + e.getMessage());
			response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_MENU_COD_IDT14);
			response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_MENU_MSJ_IDT14);
		}
		
		return response;
	}

	@Override
	public GenericResponse nuevoMenu(String codTransaccion, MenuBean menu) {
		
		GenericResponse response = new GenericResponse();
		GenericEntity nuevoMenu = null;
		try{
			MenuNuevoRequest req = new MenuNuevoRequest();
			req.setActive(menu.getActive());
			req.setIcon(menu.getIcon());
			req.setModuloId(menu.getCodModulo());
			req.setNombre(menu.getNombreMenu());
			req.setOrden(menu.getOrden());
			req.setPadre(menu.getCodMenuPadre());
			req.setUrl(menu.getUrl());
			nuevoMenu = mantenimientoMenuDao.nuevoMenu(req);
			
			if(nuevoMenu.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				
				response.setIdTransaccion(codTransaccion);
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setIdTransaccion(codTransaccion);
				response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_MENU_COD_IDF14);
				response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_MENU_MSJ_IDF14);
			}
			
		}catch(Exception e){
			System.out.println("Error: " + e + e.getMessage());
			response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_MENU_COD_IDT15);
			response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_MENU_MSJ_IDT15);
		}
		
		return response;
	}

	@Override
	public GenericResponse editMenu(String codTransaccion, MenuBean menu) {
		
		GenericResponse response = new GenericResponse();
		GenericEntity editMenu=null;
		try{
			MenuEditRequest req = new MenuEditRequest();
			req.setActive(menu.getActive());
			req.setCodMenu(menu.getId());
			req.setIcon(menu.getIcon());
			req.setModuloId(menu.getCodModulo());
			req.setNombre(menu.getNombreMenu());
			req.setOrden(menu.getOrden());
			req.setPadre(menu.getCodMenuPadre());
			req.setUrl(menu.getUrl());
			
			editMenu = mantenimientoMenuDao.actualizarMenu(req);
			
			if(editMenu.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setIdTransaccion(codTransaccion);
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setIdTransaccion(codTransaccion);
				response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_MENU_COD_IDF15);
				response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_MENU_MSJ_IDF15);
			}
			
		}catch(Exception e){
			response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_MENU_COD_IDT16);
			response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_MENU_MSJ_IDT16);
		
		}
		return response;
	}

	@Override
	public GenericResponse deleteMenu(String codTransaccion, int codMenu) {
		
		GenericResponse response = new GenericResponse();
		GenericEntity deleteMenu=null;
		try{
			
			deleteMenu = mantenimientoMenuDao.eliminarMenu(codMenu);
			
			if(deleteMenu.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setIdTransaccion(codTransaccion);
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);	
			}else{
				response.setIdTransaccion(codTransaccion);
				response.setCodigoRespuesta(ConstantesInternasSistema.DELETE_MENU_COD_IDF16);
				response.setMensajeRespuesta(ConstantesInternasSistema.DELETE_MENU_MSJ_IDF16);	
			}
			
			
		}catch(Exception e){
			response.setCodigoRespuesta(ConstantesInternasSistema.DELETE_MENU_COD_IDT17);
			response.setMensajeRespuesta(ConstantesInternasSistema.DELETE_MENU_MSJ_IDT17);	
		}
		return response;
	}

}
